#ifndef _WebSocketServer_
#define _WebSocketServer_

#ifdef __cplusplus
extern "C"
{
#endif

#define WS_CONNECT_BUILD_FILTER           "wsConnectFilter"      //连接过滤器，根据此状态处理是否需要建立连接
#define WS_CONNECT_ESTABLISHED            "wsConnected"          //连接已建立成功
#define WS_CONNECT_MSG_RECEIVED           "wsMsgReceived"        //收到消息
#define WS_CONNECT_CLOSED                 "wsClosed"             //连接关闭

struct SocketClientInfo;

//ws连接
typedef struct SocketClientInfo ConnectInfo;

/**
 * @param path          连接路径
 * @param status        socket连接状态
 * @param connectInfo   连接详情
 * @param msg           消息内容
 * @param msgLength     消息长度
 * */
typedef int (*MsgCallback)(const char *path, const char *status, ConnectInfo *connectInfo, void *msg, int msgLength);

/**
 * @desc  启动ws server
 * @param port          监听端口
 * */
int ws_server_start(int port);

/**
 * @desc  关闭ws server
 * */
int ws_server_stop();

/**
 * @desc  注册ws server回调
 * @param path          连接路径
 * @param msgCallback   回调接口
 * */
int ws_server_regist_callback(const char *path, MsgCallback msgCallback);

/**
 * @desc  发送数据到当前所有连接着的客户端
 * @param data          发送数据
 * @param dataLength    数据长度
 * */
int ws_server_send_to_all(void *data, int dataLength);

/**
 * @desc  发送数据到指定连接着的客户端
 * @param connectInfo   连接详情
 * @param data          发送数据
 * @param dataLength    数据长度
 * */
int ws_server_send_to_specify_client(ConnectInfo *connectInfo, void *data, int dataLength);

/**
 * @desc  关闭连接
 * @param connectInfo   连接详情
 * */
int ws_server_close_connect(ConnectInfo *connectInfo);

/**
 * @desc  获取指定路径的连接数量
 * @param path          连接路径
 * */
int ws_server_get_connect_count(const char *path);

#ifdef __cplusplus
}
#endif

#endif